From f837b366c910d10f6a299e7d1290411acd7168d0 Mon Sep 17 00:00:00 2001 From: robertl Date: Mon, 6 Nov 2006 22:01:36 +0000 Subject: [PATCH] Reduce number of leaks in realtime tracking mode on Garmins to zero. git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@2482 f51c46e8-681c-474f-0cfe-069cfd0219fb --- gpsbabel/Makefile.in | 1 + gpsbabel/garmin.c | 4 ++++ gpsbabel/jeeps/gpsapp.c | 18 +++++++++++++++--- gpsbabel/jeeps/gpslibusb.c | 1 + gpsbabel/kml.c | 2 +- gpsbabel/main.c | 3 ++- 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/gpsbabel/Makefile.in b/gpsbabel/Makefile.in index fcfc1a08b..b73fd820b 100644 --- a/gpsbabel/Makefile.in +++ b/gpsbabel/Makefile.in @@ -155,6 +155,7 @@ dep: echo Edit Makefile.in and bring in /tmp/dep $(WEB)/htmldoc-$(DOCVERSION)/readme.html: FORCE + mkdir -p $(WEB)/htmldoc-$(DOCVERSION) perl xmldoc/makedoc xmlwf xmldoc/readme.xml #check for well-formedness xmllint --noout --valid xmldoc/readme.xml #validate diff --git a/gpsbabel/garmin.c b/gpsbabel/garmin.c index c696357b0..93ba7521d 100644 --- a/gpsbabel/garmin.c +++ b/gpsbabel/garmin.c @@ -284,6 +284,7 @@ waypt_read(void) waypt_add(wpt_tmp); GPS_Way_Del(&way[i]); } + xfree(way); } static @@ -476,6 +477,8 @@ pvt_read(posn_status *posn_status) if (GPS_Command_Pvt_Get(&pvt_fd, &pvt)) { pvt2wpt(pvt, wpt); + GPS_Pvt_Del(&pvt); + wpt->shortname = xstrdup("Position"); if (gps_errno && posn_status) { @@ -493,6 +496,7 @@ pvt_read(posn_status *posn_status) fatal(MYNAME ": Fatal error reading position.\n"); } + waypt_free(wpt); GPS_Pvt_Del(&pvt); return NULL; diff --git a/gpsbabel/jeeps/gpsapp.c b/gpsbabel/jeeps/gpsapp.c index 104f535c7..05aac8417 100644 --- a/gpsbabel/jeeps/gpsapp.c +++ b/gpsbabel/jeeps/gpsapp.c @@ -3467,6 +3467,9 @@ drain_run_cmd(gpsdevh *fd) break; } } + + GPS_Packet_Del(&tra); + GPS_Packet_Del(&rec); return 0; } @@ -5967,18 +5970,25 @@ int32 GPS_A800_Get(gpsdevh **fd, GPS_PPvt_Data *packet) GPS_PPacket tra; GPS_PPacket rec; - if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New())) return MEMORY_ERROR; - if(!GPS_Packet_Read(*fd, &rec)) + if(!GPS_Packet_Read(*fd, &rec)) { + GPS_Packet_Del(&rec); + GPS_Packet_Del(&tra); return gps_errno; + } - if(!GPS_Send_Ack(*fd, &tra, &rec)) + if(!GPS_Send_Ack(*fd, &tra, &rec)) { + GPS_Packet_Del(&rec); + GPS_Packet_Del(&tra); return gps_errno; + } if (rec->type != LINK_ID[gps_link_type].Pid_Pvt_Data) { + GPS_Packet_Del(&rec); + GPS_Packet_Del(&tra); return 0; } @@ -5989,6 +5999,8 @@ int32 GPS_A800_Get(gpsdevh **fd, GPS_PPvt_Data *packet) break; default: GPS_Error("A800_GET: Unknown pvt protocol"); + GPS_Packet_Del(&rec); + GPS_Packet_Del(&tra); return PROTOCOL_ERROR; } diff --git a/gpsbabel/jeeps/gpslibusb.c b/gpsbabel/jeeps/gpslibusb.c index 225f35a47..184713446 100644 --- a/gpsbabel/jeeps/gpslibusb.c +++ b/gpsbabel/jeeps/gpslibusb.c @@ -104,6 +104,7 @@ gusb_teardown(gpsdevh *dh) if (udev) { usb_release_interface(udev, 0); usb_close(udev); + xfree(dh); udev = NULL; } return 0; diff --git a/gpsbabel/kml.c b/gpsbabel/kml.c index aad687678..cd92713a0 100644 --- a/gpsbabel/kml.c +++ b/gpsbabel/kml.c @@ -296,7 +296,7 @@ kml_wr_deinit(void) * the file to be missing. Windows readers will simply * have to retry on this case. */ - unlink(posnfilename); + _unlink(posnfilename); #endif rename(posnfilenametmp, posnfilename); xfree(posnfilenametmp); diff --git a/gpsbabel/main.c b/gpsbabel/main.c index 9fcfc7081..f10caa190 100644 --- a/gpsbabel/main.c +++ b/gpsbabel/main.c @@ -565,8 +565,9 @@ main(int argc, char *argv[]) while (1) { posn_status status; - waypoint *wpt = ivecs->position_ops.rd_position(&status); + status.request_terminate = 0; + waypoint *wpt = ivecs->position_ops.rd_position(&status); if (status.request_terminate) { if (wpt) { -- 2.30.2